package cn.b.sky.user.dao;

import cn.b.sky.user.service.model.*;
import cn.b.sky.user.service.model.condition.UserCondition;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 
 * @ClassName: UserDao 
 * @Description:用户管理数据接口
 * @author: ZhaoXin
 * @date: 2015-7-31 下午01:05:53
 * @version: V1.0  
 *
 */
public interface UserDao {

  /**
   * 
  * @Title:selectUserList 
  * @Description:查询用户列表 
  * @param userCondition
  * @return List<UserInfo>
  * @author: ZhaoXin
  * @date: 2015-7-31 下午01:06:15
  * @version: V1.0
   */
  public List<UserInfo> selectUserList(UserCondition userCondition);

  /**
   * 
  * @Title:selectUserListCount 
  * @Description:查询用户条数
  * @param userCondition
  * @return int
  * @author: ZhaoXin
  * @date: 2015-7-31 下午01:06:38
  * @version: V1.0
   */
  public int selectUserListCount(UserCondition userCondition);

  /**
   * 
  * @Title:selectAllLanaguage 
  * @Description:查询所有语言 
  * @return List<LanguageInfo>
  * @author: ZhaoXin
  * @date: 2015-8-3 上午11:11:14
  * @version: V1.0
   */
  List<Language> selectAllLanaguage();

  /**
   * 
  * @Title:selectTimeZone 
  * @Description:查询时区
  * @return List<TimeZoneInfo>
  * @author: ZhaoXin
  * @date: 2015-8-3 上午11:16:02
  * @version: V1.0
   */
  List<TimeZone> selectTimeZone();

  /**
   * 
   * <strong>Title : insertUser<br></strong>
   * <strong>Description : </strong>新增用户<br> 
   * <strong>Create on : 2015-8-4 下午05:40:14<br></strong>
   * <p>
   * @param userInfo
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertUser(UserInfo userInfo);

  /**
   * 
   * <strong>Title : insertUserOrganization<br></strong>
   * <strong>Description : </strong>新增用户组织<br> 
   * <strong>Create on : 2015-8-4 下午05:41:27<br></strong>
   * <p>
   * @param userOranization
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertUserOrganization(UserOrganization userOranization);

  /**
   * 
   * <strong>Title : insertUserRole<br></strong>
   * <strong>Description : </strong>新增用户角色<br> 
   * <strong>Create on : 2015-8-4 下午05:41:57<br></strong>
   * <p>
   * @param userRole
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertUserRole(UserRole userRole);

  /**
   * 
   * <strong>Title : selectOrganizationByUser<br></strong>
   * <strong>Description : </strong>查询用户对应的组织<br> 
   * <strong>Create on : 2015-8-4 下午07:48:34<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @return
   * List<Organization>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Organization> selectOrganizationByUser(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : selectRoleByUser<br></strong>
   * <strong>Description : </strong>查询用户对应的角色<br> 
   * <strong>Create on : 2015-8-4 下午07:51:14<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @return
   * List<Role>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Role> selectRoleByUser(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : selectUser<br></strong>
   * <strong>Description : </strong>查询用户<br> 
   * <strong>Create on : 2015-8-4 下午08:47:16<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @return
   * UserInfo
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  UserInfo selectUser(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : selectUserParameter<br></strong>
   * <strong>Description : </strong>查询用户参数<br> 
   * <strong>Create on : 2015-8-4 下午08:54:28<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @return
   * List<UserParameter>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<UserParameter> selectUserParameter(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : updateUser<br></strong>
   * <strong>Description : </strong>更新用户<br> 
   * <strong>Create on : 2015-8-4 下午09:46:43<br></strong>
   * <p>
   * @param userInfo
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateUser(UserInfo userInfo);

  /**
   * 
   * <strong>Title : deleteUser<br></strong>
   * <strong>Description : </strong>删除用户<br> 
   * <strong>Create on : 2015-8-4 下午09:42:34<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteUser(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : deleteUserOrganization<br></strong>
   * <strong>Description : </strong>删除用户组织<br> 
   * <strong>Create on : 2015-8-4 下午09:43:19<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteUserOrganization(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : deleteUserRole<br></strong>
   * <strong>Description : </strong>删除用户角色<br> 
   * <strong>Create on : 2015-8-4 下午09:43:42<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteUserRole(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : deleteUserParameter<br></strong>
   * <strong>Description : </strong>删除用户参数<br> 
   * <strong>Create on : 2015-8-4 下午09:44:35<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteUserParameter(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : selectUserByOrganization<br></strong>
   * <strong>Description : </strong>根据组织结构查询用户<br> 
   * <strong>Create on : 2015-8-10 上午10:36:03<br></strong>
   * <p>
   * @param siteCode
   * @param organizationCode
   * @return
   * List<UserInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<UserInfo> selectUserByOrganization(@Param("siteCode") String siteCode,
                                          @Param("organizationCode") String organizationCode);

  /**
   * 
   * <strong>Title : selectUserNotInOrganization<br></strong>
   * <strong>Description : </strong>查询未划分组织结构的用户<br> 
   * <strong>Create on : 2015-8-10 上午10:36:45<br></strong>
   * <p>
   * @param siteCode
   * @return
   * List<UserInfo>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<UserInfo> selectUserNotInOrganization(@Param("siteCode") String siteCode);

  /**
   * 
   * <strong>Title : deleteUserOrganizationByOrg<br></strong>
   * <strong>Description : </strong>根据组织删除用户组织信息<br> 
   * <strong>Create on : 2015-8-10 下午04:50:28<br></strong>
   * <p>
   * @param siteCode
   * @param organizationCode
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteUserOrganizationByOrg(@Param("siteCode") String siteCode,
                                   @Param("organizationCode") String organizationCode);

  /**
   * 
   * <strong>Title : updateUserPwd<br></strong>
   * <strong>Description : </strong>修改用户密码<br> 
   * <strong>Create on : 2015-9-1 下午02:47:53<br></strong>
   * <p>
   * @param siteCode
   * @param userCode
   * @param password
   * void
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateUserPwd(@Param("siteCode") String siteCode, @Param("userCode") String userCode,
                     @Param("password") String password);

  /**
   * 
   * <strong>Title : selectUserSuggests<br></strong>
   * <strong>Description : </strong>用户搜索建议<br> 
   * <strong>Create on : 2016年4月11日 下午8:12:02<br></strong>
   * <p>
   * @param condition
   * @return
   * List<UserInfo>
   * @throws 
   * @author Yantao.Lu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<UserInfo> selectUserSuggests(UserCondition condition);
}
